Django documentation

Django shortcut functions

The package django.shortcuts collects helper functions and classes that “span” multiple levels of MVC. In other words, these functions/classes introduce controlled coupling for convenience’s sake.

render

render(request, template_name[, dictionary][, context_instance][, content_type][, status][, current_app])

Combines a given template with a given context dictionary and returns an HttpResponse object with that rendered text.

render() is the same as a call to render_to_response() with a context_instance argument that forces the use of a RequestContext.

Required arguments

request
The request object used to generate this response.
template_name
The full name of a template to use or sequence of template names.

Optional arguments

dictionary
A dictionary of values to add to the template context. By default, this is an empty dictionary. If a value in the dictionary is callable, the view will call it just before rendering the template.
context_instance
The context instance to render the template with. By default, the template will be rendered with a RequestContext instance (filled with values from request and dictionary).
content_type

The MIME type to use for the resulting document. Defaults to the value of the DEFAULT_CONTENT_TYPE setting.

Changed in Django 1.5:

This parameter used to be called mimetype.

status
The status code for the response. Defaults to 200.
current_app
A hint indicating which application contains the current view. See the namespaced URL resolution strategy for more information.

Example

The following example renders the template myapp/index.html with the MIME type application/xhtml+xml:

from django.shortcuts import render  def my_view(request):     # View code here...     return render(request, 'myapp/index.html', {"foo": "bar"},         content_type="application/xhtml+xml") 

This example is equivalent to:

from django.http import HttpResponse from django.template import RequestContext, loader  def my_view(request):     # View code here...     t = loader.get_template('myapp/template.html')     c = RequestContext(request, {'foo': 'bar'})     return HttpResponse(t.render(c),         content_type="application/xhtml+xml") 

render_to_response

render_to_response(template_name[, dictionary][, context_instance][, content_type])

Renders a given template with a given context dictionary and returns an HttpResponse object with that rendered text.

Required arguments

template_name
The full name of a template to use or sequence of template names. If a sequence is given, the first template that exists will be used. See the template loader documentation for more information on how templates are found.

Optional arguments

dictionary
A dictionary of values to add to the template context. By default, this is an empty dictionary. If a value in the dictionary is callable, the view will call it just before rendering the template.
context_instance

The context instance to render the template with. By default, the template will be rendered with a Context instance (filled with values from dictionary). If you need to use context processors, render the template with a RequestContext instance instead. Your code might look something like this:

return render_to_response('my_template.html',                           my_data_dictionary,                           context_instance=RequestContext(request)) 
content_type

The MIME type to use for the resulting document. Defaults to the value of the DEFAULT_CONTENT_TYPE setting.

Changed in Django 1.5:

This parameter used to be called mimetype.

Example

The following example renders the template myapp/index.html with the MIME type application/xhtml+xml:

from django.shortcuts import render_to_response  def my_view(request):     # View code here...     return render_to_response('myapp/index.html', {"foo": "bar"},         mimetype="application/xhtml+xml") 

This example is equivalent to:

from django.http import HttpResponse from django.template import Context, loader  def my_view(request):     # View code here...     t = loader.get_template('myapp/template.html')     c = Context({'foo': 'bar'})     return HttpResponse(t.render(c),         content_type="application/xhtml+xml") 

redirect

redirect(to[, permanent=False], *args, **kwargs)

Returns an HttpResponseRedirect to the appropriate URL for the arguments passed.

The arguments could be:

  • A model: the model’s get_absolute_url() function will be called.
  • A view name, possibly with arguments: urlresolvers.reverse will be used to reverse-resolve the name.
  • A URL, which will be used as-is for the redirect location.

By default issues a temporary redirect; pass permanent=True to issue a permanent redirect

Examples

You can use the redirect() function in a number of ways.

  1. By passing some object; that object’s get_absolute_url() method will be called to figure out the redirect URL:

    from django.shortcuts import redirect  def my_view(request):     ...     object = MyModel.objects.get(...)     return redirect(object) 
  2. By passing the name of a view and optionally some positional or keyword arguments; the URL will be reverse resolved using the reverse() method:

    def my_view(request):     ...     return redirect('some-view-name', foo='bar') 
  3. By passing a hardcoded URL to redirect to:

    def my_view(request):     ...     return redirect('/some/url/') 

    This also works with full URLs:

    def my_view(request):     ...     return redirect('http://example.com/') 

By default, redirect() returns a temporary redirect. All of the above forms accept a permanent argument; if set to True a permanent redirect will be returned:

def my_view(request):     ...     object = MyModel.objects.get(...)     return redirect(object, permanent=True) 

get_object_or_404

get_object_or_404(klass, *args, **kwargs)

Calls get() on a given model manager, but it raises Http404 instead of the model’s DoesNotExist exception.

Required arguments

klass
A Model, Manager or QuerySet instance from which to get the object.
**kwargs
Lookup parameters, which should be in the format accepted by get() and filter().

Example

The following example gets the object with the primary key of 1 from MyModel:

from django.shortcuts import get_object_or_404  def my_view(request):     my_object = get_object_or_404(MyModel, pk=1) 

This example is equivalent to:

from django.http import Http404  def my_view(request):     try:         my_object = MyModel.objects.get(pk=1)     except MyModel.DoesNotExist:         raise Http404 

Note: As with get(), a MultipleObjectsReturned exception will be raised if more than one object is found.

get_list_or_404

get_list_or_404(klass, *args, **kwargs)

Returns the result of filter() on a given model manager cast to a list, raising Http404 if the resulting list is empty.

Required arguments

klass
A Model, Manager or QuerySet instance from which to get the list.
**kwargs
Lookup parameters, which should be in the format accepted by get() and filter().

Example

The following example gets all published objects from MyModel:

from django.shortcuts import get_list_or_404  def my_view(request):     my_objects = get_list_or_404(MyModel, published=True) 

This example is equivalent to:

from django.http import Http404  def my_view(request):     my_objects = list(MyModel.objects.filter(published=True))     if not my_objects:         raise Http404 

Questions/Feedback

Having trouble? We'd like to help!

This document is for Django's development version, which can be significantly different from previous releases. For older releases, use the version selector floating in the bottom right corner of this page.